package com.gin.kotlin.no_gay_alliance.base

import android.content.Context
import android.content.res.Resources
import android.content.res.Resources.Theme
import androidx.core.content.res.ResourcesCompat
import androidx.fragment.app.FragmentActivity
import com.gin.kotlin.no_gay_alliance.R
import com.wgw.photo.preview.Config
import com.wgw.photo.preview.IndicatorType
import com.wgw.photo.preview.PhotoPreview
import com.wgw.photo.preview.interfaces.OnLongClickListener

/**
 * 图片预览工具类
 */
class PhotoPreviewUtils {
    companion object {
        fun build(activity: FragmentActivity, urls: List<String>, listener: OnLongClickListener? = null): PhotoPreview.Builder =
            PhotoPreview.with(activity)

                // 应用其它配置，以下配置覆盖此config中对应的属性
                .config(previewConfig(activity))
                // 设置图片数据，有sources(Object...)和source(List)两个重载
                .sources(urls)
                .onLongClickListener(listener)


        private fun previewConfig(context: Context): Config {
            val resources: Resources = context.resources
            val theme: Theme = context.theme

            val config = Config()
            //图片指示器类型(目前只有圆点和文本)，预览>=2张图片时有效
            config.indicatorType = IndicatorType.DOT
            // indicatorType为DOT时，设置DOT最大数量，如果sources数量超过此值，则改用IndicatorType.TEXT
            config.maxIndicatorDot = 9
            // 指示当前预览界面指示器颜色
            config.selectIndicatorColor = ResourcesCompat.getColor(resources, R.color.yellow_dark, theme)
            // 非当前预览界面指示器颜色
            config.normalIndicatorColor = ResourcesCompat.getColor(resources, R.color.yellow_light, theme)
            // 图片加载loading color, android5.0(含)之后有效
            config.progressColor = ResourcesCompat.getColor(resources, R.color.yellow_dark, theme)
            // 全屏预览
            config.fullScreen = true
            // 是否展示缩略图蒙层，如果设置为true,则预览动画执行时,缩略图不显示，预览更沉浸
            config.showThumbnailViewMask = true
            // 是否在打开预览动画执行开始的时候执行状态栏隐藏/显示操作
            config.openAnimStartHideOrShowStatusBar = true
            // 动画时间，null：使用默认时间，<=0: 不执行动画
            config.animDuration = 400L
            return config
        }
    }
}